package com.stefanini.pe.bbva.bp.in.bo.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.stefanini.pe.bbva.bp.in.bo.iface.SituacionRebalancearBOIface;
import com.stefanini.pe.bbva.bp.in.dao.iface.SituacionRebalancearDAOIface;
import com.stefanini.pe.bbva.bp.in.utils.Util;

@Service("situacionRebalancearBO")
public class SituacionRebalancearBOImpl implements SituacionRebalancearBOIface{
	
	@Autowired
	private SituacionRebalancearDAOIface situacionRebalancearDAOIface;
	
	public List listarDistribucionCategoriaAct(String codCliente, String codContrato, String codRegistro,HashMap totalesDistribucionAct) {
		Double totalDisponibleDolarizado=new Double(0);
		Double pesoActual=new Double(0);
		Double pesoIdeal=new Double(0);
		Double desviacionPorcentual=new Double(0);
		Double desviacionPropuestaMonto=new Double(0);
		List listDistribucionCatAct=new ArrayList();
		for (Iterator iter = situacionRebalancearDAOIface.listarDistribucionCategoriaAct(codCliente, codContrato, codRegistro).iterator(); iter.hasNext();) {
			HashMap element = (HashMap) iter.next();
			totalDisponibleDolarizado+=Util.isNumber(element.get("monto_actualdolarizado"));
			pesoActual+=Util.isNumber(element.get("pesoactual"));
			pesoIdeal+=Util.isNumber(element.get("pesoideal"));
			desviacionPorcentual+=Util.isNumber(element.get("desviacionporcentual"));
			desviacionPropuestaMonto+=Util.isNumber(element.get("desviacionpropuestamonto"));
			element.put("pesoactualF", Util.formatDoublePorcentaje(Util.isNumber(element.get("pesoactual"))));
			element.put("pesoidealF", Util.formatDoublePorcentaje(Util.isNumber(element.get("pesoideal"))));
			element.put("monto_actualdolarizadoF", Util.formatDouble(Util.isNumber(element.get("monto_actualdolarizado"))));
			element.put("desviacionporcentualF", Util.formatDoublePorcentaje(Util.isNumber(element.get("desviacionporcentual"))));
			element.put("desviacionpropuestamontoF", Util.formatDouble(Util.isNumber(element.get("desviacionpropuestamonto"))));
			listDistribucionCatAct.add(element);
		}
		totalesDistribucionAct.put("descripcion", "Total");
		totalesDistribucionAct.put("total_actualdolarizado", Util.formatDouble(totalDisponibleDolarizado));
		//totalesDistribucionAct.put("total_pesoactual", Util.formatDoublePorcentaje(pesoActual));
		//totalesDistribucionAct.put("total_pesoideal", Util.formatDoublePorcentaje(pesoIdeal));
		
		totalesDistribucionAct.put("total_pesoactual", "100");
		totalesDistribucionAct.put("total_pesoideal", "100");
		totalesDistribucionAct.put("total_desviacionporcentual", Util.formatDouble(desviacionPorcentual));
		totalesDistribucionAct.put("total_desviacionpropuestamonto", Util.formatDouble(desviacionPropuestaMonto));
		return listDistribucionCatAct;
	}
	public List<HashMap> listarDistribucionTipoProducto(String codCliente, String codContrato, String codRegistro, HashMap totalesDistribucionTipProd) {
		Double montoUSD=new Double(0);
		Double pesoUSD=new Double(0);
		Double montoPEN=new Double(0);
		Double pesoPEN=new Double(0);
		Double montoEUR=new Double(0);
		Double pesoEUR=new Double(0);
		List listDistribucionTipProd=new ArrayList();
		for (Iterator iter = situacionRebalancearDAOIface.listarDistribucionTipoProducto(codCliente, codContrato, codRegistro).iterator(); iter.hasNext();) {
			HashMap element = (HashMap) iter.next();
			montoUSD+=Util.isNumber(element.get("monto_disponibleusd"));
			pesoUSD+=Util.isNumber(element.get("peso_disponibleusd"));
			montoPEN+=Util.isNumber(element.get("monto_disponiblepen"));
			pesoPEN+=Util.isNumber(element.get("peso_disponiblepen"));
			montoEUR+=Util.isNumber(element.get("monto_disponibleeur"));
			pesoEUR+=Util.isNumber(element.get("peso_disponibleeur"));
			element.put("monto_disponibleusdF", Util.formatDouble(Util.isNumber(element.get("monto_disponibleusd"))));
			element.put("monto_disponiblepenF", Util.formatDouble(Util.isNumber(element.get("monto_disponiblepen"))));
			element.put("monto_disponibleeurF", Util.formatDouble(Util.isNumber(element.get("monto_disponibleeur"))));
			element.put("peso_disponibleusdF", Util.formatDoublePorcentaje(Util.isNumber(element.get("peso_disponibleusd"))));
			element.put("peso_disponiblepenF", Util.formatDoublePorcentaje(Util.isNumber(element.get("peso_disponiblepen"))));
			element.put("peso_disponibleeurF", Util.formatDoublePorcentaje(Util.isNumber(element.get("peso_disponibleeur"))));
			listDistribucionTipProd.add(element);
		}
		totalesDistribucionTipProd.put("descripcion", "Total Activos en Portafolio");
		totalesDistribucionTipProd.put("total_montoUSD", Util.formatDouble(montoUSD));
		//totalesDistribucionTipProd.put("total_pesoUSD", Util.formatDoublePorcentaje(pesoUSD));
		totalesDistribucionTipProd.put("total_pesoUSD", "100");
		totalesDistribucionTipProd.put("total_montoPEN", Util.formatDouble(montoPEN));
		//totalesDistribucionTipProd.put("total_pesoPEN", Util.formatDoublePorcentaje(pesoPEN));
		totalesDistribucionTipProd.put("total_pesoPEN", "100");
		totalesDistribucionTipProd.put("total_montoEUR", Util.formatDouble(montoEUR));
		//totalesDistribucionTipProd.put("total_pesoEUR", Util.formatDoublePorcentaje(pesoEUR));
		totalesDistribucionTipProd.put("total_pesoEUR", "100");
		return listDistribucionTipProd;
	}
	
	public List<HashMap> listarExposicionActPart(String codCliente, String codContrato, String codRegistro, HashMap totalesExposicionActPart) {
		List listExposicionActPart=new ArrayList();
		for (Iterator iter = situacionRebalancearDAOIface.listarExposicionActPart(codCliente, codContrato, codRegistro).iterator(); iter.hasNext();) {
			HashMap element = (HashMap) iter.next();
			element.put("terminoindividual", Util.formatDoublePorcentaje(Util.isNumberFormat(element.get("terminoindividual"))));
			element.put("terminocolectivo", Util.formatDoublePorcentaje(Util.isNumberFormat(element.get("terminocolectivo"))));
			element.put("resultindividual", Util.formatDouble(Util.isNumber(element.get("resultindividual"))));
			element.put("resultcolectivo", Util.formatDouble(Util.isNumber(element.get("resultcolectivo"))));
			listExposicionActPart.add(element);
		}
		return listExposicionActPart;
	}
	
	
}

